package com.steven.dao;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.steven.dao.impl.CriteriaMap;


public interface IMongoDao {
	/** 
     * 插入单个数据 
     * @param objectToSave 
     * @param tableName 
     */  
    public void insert(Object objectToSave, String tableName);  
      
    /** 
     * 插入批量数据 
     * @param batchToSave 
     * @param tableName 
     */  
    public void insertBath(Collection<? extends Object> batchToSave, String tableName);  
  
    /** 
     * 根据条件删除数据 
     * @param criteriaMap 
     * @param tableName 
     */  
    public void deleteByMap(CriteriaMap criteriaMap, String tableName);
    
    /** 
     * 插叙id
     * @param objectToSave 
     * @param tableName 
     */  
    public <T> T findById(String id, Class<T> c);
  
    /** 
     * 删除所有数据 
     * @param tableName 
     */  
    public void deleteAll(String tableName);  
      
    /** 
     * 更新数据 
     * @param criteriaMap 
     * @param setMap 
     * @param tableName 
     */  
    public void update(CriteriaMap criteriaMap, Map<String, Object> setMap, String tableName) ;  
      
    /** 
     * 查询数据 
     * @param criteriaMap 
     * @param c 
     * @param tableName 
     * @return 
     */  
    public <T> List<T> findByMap(CriteriaMap criteriaMap, Class<T> c, String tableName) ;  
    
    /** 
     * 查询一条数据
     * @param criteriaMap 
     * @param c 
     * @return 
     */  
    public <T> T findByOne(CriteriaMap criteriaMap, Class<T> c) ;  
    
    /** 
     * 查询一条指定数据
     * @param criteriaMap 
     * @param c 
     * @param tableName 
     * @return 
     */  
    public <T> T findByOneTableName(CriteriaMap criteriaMap, Class<T> c, String tableName) ;
    
    /**
     * 查询带排序的数据
     * @param criteriaMap
     * @param c
     * @param map
     * @return
     */
    public <T> T findByOneSort(CriteriaMap criteriaMap, Class<T> c, Map<String, Object> map) ;
    
    /**
     * 查询指定库的数据
     * @param criteriaMap
     * @param c
     * @param map
     * @return
     */
    public <T> T findByOneSortTableName(CriteriaMap criteriaMap, Class<T> c, Map<String, Object> map,String tableName) ;
      
    /** 
     * 查询数据，带指定起止行 
     * @param criteriaMap 
     * @param c 
     * @param start 
     * @param limit 
     * @param tableName 
     * @return 
     */  
    public <T> List<T> findByMap(CriteriaMap criteriaMap, Class<T> c, int start,  
            int limit, String tableName) ;  
      
    /** 
     * 查询数据，带分页 
     * @param criteriaMap 
     * @param c 
     * @param pageNo 
     * @param pageSize 
     * @param tableName 
     * @return 
     */  
    public <T> List<T> findByMap4Page(CriteriaMap criteriaMap, Class<T> c, int pageNo, int pageSize, String tableName) ;  
  
    /** 
     * 查询所有数据 
     * @param c 
     * @param tableName 
     * @return 
     */  
    public <T> List<T> findAll(Class<T> c, String tableName);  
  
    /** 
     * 查询数据并修改，返回修改前的数据 
     * @param criteriaMap 
     * @param setMap 
     * @param c 
     * @param tableName 
     * @return 
     */  
    public <T> T findAndModify(CriteriaMap criteriaMap, Map<String, Object> setMap, Class<T> c,  
            String tableName) ;  
      
    /** 
     * 查询数据并删除，返回删除前的数据 
     * @param criteriaMap 
     * @param c 
     * @param tableName 
     * @return 
     */  
    public <T> T findAndRemove(CriteriaMap criteriaMap, Class<T> c, String tableName);  
      
    /** 
     * 统计 
     * @param criteriaMap 
     * @param tableName 
     * @return 
     */  
    public long count(CriteriaMap criteriaMap, String tableName);  
  
    
}
